import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: mac
 * Date: 2022-09-08
 * Time: 21:08
 */

//String
//1.在JAVA中没有所谓的，字符串以\0结尾！
//2.为什么换个引用后修改字符串的内容，前一个引用指向内容依然不变
//因为实际指向的内容是个字面值常量，常量无法被修改
//3.不是说传引用就能改变实参的值，要看这个引用具体指向什么
//4.常量池：
    //1.Class文件常量池：int a = 10;
    //2.运行时常量池：当程序把编译好的字节码文件，加载到JVM当中后，会生成一个运行时常量池(方法区），实际上是Class文件常量池。
    //3.字符串常量池：主要存放字符串常量->字符串常量池，本质上是一个哈希表。StringTable
    //即双引号引起来的字符串常量会被放进池子
public class TestDemo {
    public static void func2(String s){
        /*if (s == null || s.length() == 0){

        }*/
        assert s != null;
    }

    public static void main(String[] args) {
        func2(null);
    }
    public static void main11(String[] args) {
        final int[] array = {1,2,3,4,5};
        //array = new int[] {4,5,6,7};
        String str1 = null;//str1这个引用 不指向任何对象
        String str2 = "";//str2这个引用 指向的字符串是空的
        System.out.println(str2.length());
    }
    public static void main10(String[] args) {
        String str1 = null;
        String str2 = "11";//只能通过反射来修改其中的值
        System.out.println(str1.equals(str2));
    }
    public static void main9(String[] args) {
        String str1 = "11";
        String str2 = new String("1") + new String("1");
        str2.intern();
        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));
    }
    public static void main8(String[] args) {
        String str2 = new String("1") + new String("1");
        str2.intern();//手动入字符串常量池 - 保证常量池没有的时候才能入
        String str1 = "11";
        System.out.println(str1 == str2);
    }
    public static void main7(String[] args) {
        String str1 = "11";
        String str2 = new String("1") + new String("1");
        System.out.println(str1 == str2);
    }
    public static void main6(String[] args) {
        String str1 = "hello";
        String str2 = "he" + "llo";//此时他两都是常量，编译的时候，就已经确定了"hello"
        String str3 = "he";
        String str4 = str3 + "llo";//此时str3是一个变量->编译的时候不知道是谁
        String str5 = str4;
        str5 = "gawei";
        System.out.println(str4);
    }
    public static void main5(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        System.out.println(str1 == str2);
    }
    public static void main4(String[] args) {
        String str1 = "hello";
        String str2 = new String("hello");
        System.out.println(str1 == str2);
    }
    public static void func(String s,char[] array) {
        s = "zhangsan";
        array[0] = 'p';
    }

    public static void main3(String[] args) {
        String str = "abcdef";
        char[] chars = {'b','i','t'};
        func(str,chars);
        System.out.println(str);
        System.out.println(Arrays.toString(chars));
    }
    public static void main2(String[] args) {
        String str = "abcdef";
        String str2 = str;
        System.out.println(str);
        System.out.println(str2);
        str = "bit";
        System.out.println("==========");
        System.out.println(str);
        System.out.println(str2);
    }
    public static void main1(String[] args) {
        String str = "abcdef";
        //调用构造方法进行构造对象
        String str2 = new String("hello");

        /*char[] chars = {'a','b','c'};
        String str3 = new String(chars);
        System.out.println(str3);*/
        String str3 = str2;
        System.out.println(str2);
        System.out.println(str3);
        str2 = "bit";
        System.out.println("==========");
        System.out.println(str2);
        System.out.println(str3);
    }
}
